package main

import (
	"fmt"
)

// Go中string类型的使用
func main() {
	// 1.string的基本使用
	var address string = "北京长城 110 hello world"
	fmt.Println("address= ", address)

	// 2.字符串一旦赋值了，字符串就不能修改了，在Go中字符串是不可变的。
	var str = "hello"
	// str[0] = "a"		// cannot assign to str[0] (value of type byte)
	str = "abc" // 可以整个修改，但是不能使用下标单独修改
	fmt.Println("str= ", str)

	/*
		3.字符串的两种表示形式
		（1）双引号，会识别转义字符。
		（2）反引号，以字符串的原生形式输出，包括换行和特殊字符，可以实现防止攻击、输出源代码等效果。
	*/

	str2 := "abd\nabc"
	fmt.Println("str2= ", str2)

	str3 := `
		package main

		import (
			"fmt"
			"unsafe"
		)
		
		// Go中Boolean类型的使用
		func main() {
			var b = false
			fmt.Println("b=", b)
			// 注意事项
			// 1. bool类型占用存储空间是1个字节
			fmt.Println("b 的占用空间 =", unsafe.Sizeof(b))
			// 2. 一个布尔类型的值只有两种：true 或 false
			// b = 1		// cannot use 1 (untyped int constant) as bool value in assignment
		}
	`

	fmt.Println(str3)

	// 字符串拼接方式
	var str4 = "hello " + "world"
	str4 += " haha!"

	fmt.Println(str4)

	// 当一个拼接的操作很长时，可以分行写，但是加号要留在上面
	str5 := "hello " + "world" +
		"hello " + "world" +
		"hello " + "world" +
		"hello " + "world" +
		"hello " + "world"
	fmt.Println(str5)

	var a int
	var b float32
	var c float64
	var isMarried bool
	var name string
	// %v	原值输出
	fmt.Printf("a=%d,b=%f,c=%f,ismarried=%v,name=%v", a, b, c, isMarried, name) // a=0,b=0.000000,c=0.000000,ismarried=false,name=

}
